package BehavioralPattern.Mediator;

/**
 * @Classname : MediatorClient
 * @Description : 测试 中介者模式
 * 行为型——中介者模式
 * 一、模式定义
 *   Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping
 *   objects from referring to each other explicitly, and it lets you vary their interaction independently.
 *   用一个中介对象封装一系列的对象交互，中介者使各对象不需要直接地相互作用，从而使其耦合松散，而且可以独立地改变它们之间的交互。
 *   优点：减少类间依赖，降低耦合
 *   缺点：当同事类很多时，中介者类逻辑会很复杂
 * 二、模式类图
 *   https://kdocs.cn/l/csnkfoJOU7AH
 * 三、适用场景
 *   1、当存在多对对的依赖时，通过中介者模式可以变成多对一的依赖
 * 四、应用举例
 *
 * @Author : chentianyu
 * @Date 2023/3/5 21:58
 */


public class MediatorClient {
    public static void main(String[] args) {
        // 创建中介者角色
        Mediator mediator = new ConcreteMediator();
        // 创建同事角色
        Purchase purchase = new Purchase(mediator);
        Stock stock = new Stock(mediator);
        Sale sale = new Sale(mediator);
        // 执行购销存动作
        System.out.println("------购销存------");
        purchase.purchase(2000);
        System.out.println("------购销存------");
        sale.sale(999);
    }
}

/** 20230305
 * ------购销存------
 * 采购部：采购商品2000件
 * 库存部：库存增加【2000】，当前库存为【2000】
 * ------高库存，商品促销------
 * 销售部：销售商品1000件
 * 库存部：库存减少【1000】，当前库存为【1000】
 * ------购销存------
 * 销售部：销售商品999件
 * 库存部：库存减少【999】，当前库存为【1】
 * ------低库存，采购商品------
 * 采购部：采购商品500件
 * 库存部：库存增加【500】，当前库存为【501】
 */
